package com.hinnotek.amoeba.ui.activity.old

import android.os.Bundle
import android.view.View
import androidx.activity.viewModels
import com.chad.library.adapter.base.BaseQuickAdapter
import com.lee.common.base.BaseActivity
import com.hinnotek.amoeba.R
import com.hinnotek.amoeba.adapters.old.PaymentRequestAdapter
import com.hinnotek.amoeba.bean.old.AmibaProjectListByOrgIdBean
import com.hinnotek.amoeba.databinding.IncludeRecyclerviewButtonBinding
import com.hinnotek.amoeba.dialog.CustomDialog
import com.hinnotek.amoeba.ext.init
import com.hinnotek.amoeba.utilities.IntentUtils
import com.lee.common.utils.SharedPreUtils
import com.hinnotek.amoeba.utilities.StatusBarUtil
import com.hinnotek.amoeba.utilities.ToastUtils
import com.hinnotek.amoeba.viewmodels.AmibaPayViewModel
import com.lee.common.network.net.ObserverState
import com.scwang.smart.refresh.layout.api.RefreshLayout

class PaymentRequestListActivity : BaseActivity<IncludeRecyclerviewButtonBinding>() {
    private var pageNo = 1
    private val pageSize = 20
    private var mAdapter: PaymentRequestAdapter? = null

    val viewModel by viewModels<AmibaPayViewModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setLeftVisible(true)
        setTitle("付款申请")

        setContentView(R.layout.include_recyclerview_button)
    }

    override fun initVew() {

        StatusBarUtil.setStatusBarColor(this, R.color.colorbtns)
        bindingView.superButtonB.text = "添加"
        bindingView.recyclerView.init()
        bindingView.recyclerView.adapter = PaymentRequestAdapter().also { mAdapter = it }
        mAdapter?.setOnItemClickListener { adapter: BaseQuickAdapter<*, *>, _: View?, position: Int ->
            val data = adapter.getItem(position) as AmibaProjectListByOrgIdBean
            val bundle = Bundle()
            bundle.putInt("amibaPayId", data.amibaPayId)
            IntentUtils.startActivity(
                mContext,
                PaymentRequestDetailAmoebaActivity::class.java,
                bundle
            )
        }
        findViewById<View>(R.id.superButton_b).setOnClickListener {
            IntentUtils.startActivity(
                mContext,
                PaymentRequestAddAmoebaActivity::class.java
            )
        }
    }

    override fun setData() {

        //下拉刷新
        bindingView.refreshLayout.setOnRefreshListener { refreshLayout: RefreshLayout ->
            refreshLayout.layout.postDelayed(
                {
                    pageNo = 1
                    getAmibaPayPageByUserId()
                    refreshLayout.finishRefresh()
                }, 0
            )
        }
        //上拉加载
        bindingView.refreshLayout.setOnLoadMoreListener { refreshLayout: RefreshLayout ->
            refreshLayout.layout.postDelayed(
                {
                    pageNo++
                    getAmibaPayPageByUserId()
                    refreshLayout.finishLoadMore()
                }, 0
            )
        }
    }

    override fun onResume() {
        super.onResume()
        bindingView.refreshLayout.autoRefresh() //第一次进入触发自动刷新，演示效果
    }//将不会再次触发加载更多事件//setNoMoreData(false);

    /**
     * app端通过申请人Id查询付款申请接口
     */
    private fun getAmibaPayPageByUserId(){
        val customDialog = CustomDialog(mContext, "正在加载...")
        customDialog.show()

        val applyUserId = SharedPreUtils.getInteger("userId",0)
        viewModel.getAmibaPayPageByUserId(applyUserId,pageNo,pageSize).observe(this,object : ObserverState<MutableList<AmibaProjectListByOrgIdBean>>(){
            override fun onDataChange(data: MutableList<AmibaProjectListByOrgIdBean>) {

                if (pageNo == 1) {
                    val status = getRefreshStatus(
                        data.size
                    )
                    when (status) {
                        Status.SUCCESS -> {
                            mAdapter?.setList(data)
                            if (data.size < pageSize) {
                                bindingView.refreshLayout.setEnableLoadMore(false)
                            } else {
                                bindingView.refreshLayout.setEnableLoadMore(true)
                            }
                            bindingView.refreshLayout.resetNoMoreData() //setNoMoreData(false);
                            bindingView.llStateful.showContent()
                        }
                        Status.EMPTY -> {
                            bindingView.llStateful.showEmpty()
                            bindingView.refreshLayout.setEnableLoadMore(false)
                        }
                        Status.ERROR -> showError()
                        Status.NO_NET -> showOffline()
                    }
                    bindingView.refreshLayout.finishRefresh()
                } else {
                    if (data.size == 0) {
                        ToastUtils.showShort("数据全部加载完毕")
                        bindingView.refreshLayout.finishLoadMoreWithNoMoreData() //将不会再次触发加载更多事件
                    } else {
                        mAdapter?.addData(data)
                        bindingView.refreshLayout.finishLoadMore()
                    }
                }

                super.onDataChange(data)
            }

            override fun onError(msg: String?, code: Int) {
                customDialog.dismiss()
                ToastUtils.showShort(mContext, msg)
                super.onError(msg, code)
            }
        })
    }
    

    private fun showOffline() {
        bindingView.llStateful.showOffline { v: View? -> bindingView.refreshLayout.autoRefresh() }
        bindingView.refreshLayout.setEnableLoadMore(false)
    }

    private fun showError() {
        bindingView.llStateful.showError(View.OnClickListener { v: View? -> bindingView.refreshLayout.autoRefresh() })
        bindingView.refreshLayout.setEnableLoadMore(false)
    }

    private enum class Status {
        SUCCESS, EMPTY, ERROR, NO_NET
    }

    private fun getRefreshStatus( size: Int): Status {
        return if (size == 0) {
            Status.EMPTY
        } else Status.SUCCESS
    }
}